2. 結(jié)構(gòu)型模型(7種)[1]

7種結(jié)構(gòu)模式
2.1 適配器模式(Adapter)
2.1.1 類的適配模式
有一個Source類,擁有一個方法、待適配,目標(biāo)接口時Targetable,通過Adapter類,將Source的功能擴展到Targetabel里。
code:
public class ClassAdapter {
class Source{
public void method1(){
System.out.println("this is original method");
}
}
interface Targertable{
void method1();
void method2();
}
class Adapter extends Source implements Targertable{
@Override
public void method2() {
System.out.println("this is targetable method");
}
}
public static void main(String[] args) {
ClassAdapter ca=new ClassAdapter();
Targertable a =ca.new Adapter();
a.method1();
a.method2();
}
}
2.1.2 對象的適配器模式
Adapter 類不繼承Source類 只持有Source類的實例
public class Adapter implements Targetable {
private Source source;
public Wrapper(Source source){
super();
this.source = source;
}
@Override
public void method2() {
System.out.println("this is the targetable method!");
}
@Override
public void method1() {
source.method1();
}
}
2.1.3 接口的適配模式
當(dāng)不希望實現(xiàn)一個接口所有的方法時,可以創(chuàng)建一個抽象類Wrapper,實現(xiàn)所有的方法,我們寫別的類,繼承抽象類即可。
2.2. 裝飾模式
裝飾模式就是給一個對象增加一些新的功能,而且是動態(tài)的,要求裝飾對象和被裝飾對象實現(xiàn)同一個接口,裝飾對象持有被裝飾對象的實例.
Source類是被裝飾類,Decorator類是一個裝飾類,可以為Source類動態(tài)的添加一些功能
public class Decorator implements Sourceable{
private Sourceable source;
public Decorator(Sourceable source) {
super();
this.source = source;
}
@Override
public void method() {
System.out.println("before decorator");
source.method();
System.out.println("after decorator");
}
}
class DecoratorTest{
public static void main(String[] args) {
Sourceable source =new Source();
Decorator ojb = new Decorator(source);
ojb.method();
}
}
interface Sourceable{
void method();
}
class Source implements Sourceable{
@Override
public void method() {
// TODO Auto-generated method stub
System.out.println("the original method");
}
}
2.3. 橋接模式
橋接模式就是把事物和其具體實現(xiàn)分開,使他們可以各自獨立的變化。
類似于 JDBC DriverManager
/**
*這樣,就通過對Bridge類的調(diào)用,實現(xiàn)了對接口Sourceable的實現(xiàn)類SourceSub1和SourceSub2的調(diào)用。
*/
public class BridgeTest {
public static void main(String[] args) {
Bridge bridge=new MyBridge();
SourceSub1 source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method();
SourceSub2 source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}
interface Sourceable{
void method();
}
class SourceSub1 implements Sourceable{
@Override
public void method() {
System.out.println("this is the first sub");
}
}
class SourceSub2 implements Sourceable{
@Override
public void method() {
System.out.println("this is the second sub");
}
}
abstract class Bridge{
private Sourceable source;
public void method(){
source.method();
}
public Sourceable getSource() {
return source;
}
public void setSource(Sourceable source) {
this.source = source;
}
}
class MyBridge extends Bridge{
@Override
public void method() {
getSource().method();
}
}
-
適配器模式、裝飾模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。其中適配器模式是各種模式的起源 ?