publicclass SlowFactory extends ProductFactory{
public ISUV getIsuv() {
returnnew SlowSUV(); } returnnew SlowBicycle(); }} public IBicylce getIBicylce() {
Client类
publicclass Client {
publicstaticvoid main(String[] args) {
ProductFactory pf=null; pf=new SuperFactory();
pf.getProductFactory(\).getIsuv().ignition(); pf.getProductFactory(\).getIsuv().startup(); }}
适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的可以一起工作。 对象适配器:聚合、合成、复用
Target接口
publicinterface Target { publicvoid request();}
concreteTarget类
publicclass ConcreteTarget implements Target{
publicvoid request() {
System.out.println(\普通类具有普通功能...\); }}
Adaptee类
publicclassAdaptee {
publicvoid specificRequest(){
System.out.println(\被适配类具有特殊功能...\);}}
Adapter类
publicclassAdapterimplements Target{ private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee=adaptee;} publicvoid request() {
this.adaptee.specificRequest(); }}
Client主类
publicclass Client {
publicstaticvoid main(String arg[]){
Target target=null;
target=new ConcreteTarget(); target.request();
target=new Adapter(new Adaptee()); target.request();}}
类适配器:继承、复用
Target接口
publicinterface Target { publicvoid request();}
ConcreteTarget类
publicclass ConcreteTarget implements Target{
publicvoid request() {
System.out.println(\普通类具有普通功能...\); }}
Adaptee类
publicclass Adaptee {
publicvoid specificRequest(){
System.out.println(\被适配类具有特殊功能...\);}}
Adapt类
publicclass Adapter extends Adaptee implements Target{
publicvoid request() {
super.specificRequest(); }}
主类
publicclass Client {
publicstaticvoid main(String[] args) {
Target t=null;
t=new ConcreteTarget(); t.request(); t=new Adapter(); t.request(); }}
装饰者模式:动态地给一个对象添加一些额外的职责,就增加功能来说;装饰者模式比继承更灵活;主要特征:对象层层包裹。
Present 抽象类
publicabstractclass Present { protected String name; public String getName(){
returnname;}
publicabstractdouble getPrice();}
Flower类
publicclass Flower extends Present { public Flower(){ name=\鲜花\;} publicdouble getPrice() {
return 5; }}
Cake类
publicclass Cake extends Present { public Cake(){ name=\蛋糕\;} publicdouble getPrice() {
return 10; }}
Decorator包装类
publicabstractclass Decorator extends Present { publicabstract String getName();}
Paper1包装类
publicclass Paper1 extends Decorator { Present present=null;
public Paper1(Present present){ this.present=present;} public String getName() {
returnpresent.getName()+\加上Paper1包装\; publicdouble getPrice() {
returnpresent.getPrice()+4; }}
Paper2包装类
publicclass Paper2 extends Decorator { Present present=null;
public Paper2(Present present){ this.present=present;
} public String getName() {
returnpresent.getName()+\用Paper2包装\; }
publicdouble getPrice() { returnpresent.getPrice()+8; }
}
Box包装类
publicclass Box extends Decorator { Present present=null;
public Box(Present present){
}
this.present=present;} public String getName() {
returnpresent.getName()+\用BOX包装\; publicdouble getPrice() {
returnpresent.getPrice()+10;
}}
}
桥接模式:将抽象部分与它的实现部分分离,使它们都可以变化。
TeaSize接口
publicabstractclass Teakind {
TeaSize ts;
publicabstractdouble getprice(); publicvoid setTeaSize(TeaSize ts){
this.ts=ts;
}}
TeaKind类
publicinterface TeaSize {
publicdouble price();}
BlackTea类
publicclass BlackTea extends Teakind {
publicdouble getprice() {
return 3*ts.price(); }}
GreenTea类
publicclass GreenTea extendsTeakind {
publicdouble getprice() {
return 4*ts.price(); }}
BigCup类