2. 结构型模型(7种)[1]
2.1 适配器模式(Adapter)
2.1.1 类的适配模式
有一个Source类,拥有一个方法、待适配,目标接口时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 接口的适配模式
当不希望实现一个接口所有的方法时,可以创建一个抽象类Wrapper,实现所有的方法,我们写别的类,继承抽象类即可。
2.2. 装饰模式
装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例.
Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能
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. 桥接模式
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。
类似于 JDBC DriverManager
/**
*这样,就通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用。
*/
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();
}
}
-
适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。其中适配器模式是各种模式的起源 ↩