本文主要用作学习记录,参考headfirst设计模式
设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起
设计原则:针对接口编程,而不是针对实现编程
设计原则:多用组合,少用继承
设计原则:类应该对扩展开放,对修改关闭
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间
JDK中体现:
(1)java.io.InputStreamReader(InputStream)
设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起
设计原则:针对接口编程,而不是针对实现编程
设计原则:多用组合,少用继承
设计原则:类应该对扩展开放,对修改关闭
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间
JDK中体现:
(1)java.io.InputStreamReader(InputStream)
(2)java.io.OutputStreamWriter(OutputStream)
对象适配器
//定义鸭子属性
public interface Duck {
public void quack();
public void fly();
}
//绿头鸭
public class MallardDuck implements Duck {
@Override
public void quack() {
System.out.println("Quack");
}
@Override
public void fly() {
System.out.println("I'm flying");
}
}
//定义火鸡属性
public interface Turkey {
public void gobble();
public void fly();
}
//火鸡
public class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("gobble gobble");
}
@Override
public void fly() {
System.out.println("i'm flying a short distance");
}
}
//将火鸡转换成鸭子
public class TurkeyAdapter implements Duck{
Turkey turkey;
public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
//测试
public class DuckTestDrive {
public static void main(String[] args) {
MallardDuck mallardDuck = new MallardDuck();
mallardDuck.quack();
mallardDuck.fly();
WildTurkey wildTurkey = new WildTurkey();
wildTurkey.gobble();
wildTurkey.fly();
Duck duck = new TurkeyAdapter(wildTurkey);
duck.quack();
duck.fly();
}
}
类适配器模式
public class ClassAdapter extends WildTurkey implements Duck{
@Override
public void quack() {
super.gobble();
}
@Override
public void fly() {
super.fly();
}
public static void main(String[] args) {
ClassAdapter classAdapter = new ClassAdapter();
classAdapter.fly();
classAdapter.quack();
}
}