Java设计模式学习笔记 2
来源:互联网 发布:say it again frances 编辑:程序博客网 时间:2024/05/29 16:50
建造者模式和装饰模式
- 建造者模式和装饰模式
- 建造者模式
- 装饰模式
- 建造者模式和装饰模式
建造者模式
建造者模式的(Builder),将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的标识。简单的用生产两个大小不同的零件举例
Product—零件类,由2个部件组成
public class Product { private String partA; private String partB; public void setPartA(String partA){ this.partA=partA; } public void setPartB(String partB){ this.partB=partB; }}
ProductBuilder接口—建造者接口,是为创建Product对象的各个部件而指定的抽象接口
public interface ProductBuilder { void buildPartA(); void buildPartB(); Product getResult();}
Director—控制建造过程
public class Director { public Product createProduct(ProductBuilder productBuilder){ productBuilder.buildPartA(); productBuilder.buildPartB(); return productBuilder.getResult(); }}
BigProduct—具体的建造者类,用于构造和装配各个部件
public class BigProductBuilder implements ProductBuilder { private static final String TAG = "BigProductBuilder"; Product product =new Product(); @Override public void buildPartA() { Log.d(TAG, "buildPartA: big"); product.setPartA("bigA"); } @Override public void buildPartB() { Log.d(TAG, "buildPartB: big"); product.setPartB("bigB"); } @Override public Product getResult() { Log.d(TAG, "getResult: big"); return product; }}
SmallProduct—具体的建造者类(代码略)
客户端代码
//创建一个大零件对象ProductBuilder builder1 =new BigProductBuilder();//创建一个小零件对象ProductBuilder builder2 =new SmallProductBuilder();//创建组装流程对象Director director=new Director();//通过组装流程对象组装大小两个零件Product big=director.createProduct(builder1);Product small=director.createProduct(builder2);
装饰模式
装饰模式,动态的给一个对象添加一些额外的职责。
与建造者模式的固定装配流程相比,装饰模式则随意得多。之前网上看到一个汉堡的例子,特别形象
Humburger—汉堡类(被装饰者基类)
public abstract class Humburger { public String name; public String getName() { return name; } abstract double getPrice();}
ChickenBurger—鸡腿堡类(被装饰者的初始状态)
public class ChickenBurger extends Humburger { public ChickenBurger() { name ="鸡腿堡"; } @Override public double getPrice() { return 10; }}
Condiment —配料的基类(装饰者,用来对汉堡进行多层装饰,每层装饰增加一些配料)
public abstract class Condiment extends Humburger { public abstract String getName();}
Lettuce—生菜(装饰者的第一层)
public class Lettuce extends Condiment { Humburger humburger; public Lettuce(Humburger humburger) { this.humburger = humburger; } @Override double getPrice() { return humburger.getPrice()+1.5; } @Override public String getName() { return humburger.getName()+" 加生菜"; }}
Chilli—辣椒(装饰者的第二层)
public class Chilli extends Condiment { Humburger humburger; public Chilli(Humburger humburger) { this.humburger = humburger; } @Override double getPrice() { return humburger.getPrice()+ 0.5; } @Override public String getName() { return humburger.getName() +" 加辣椒"; }}
客户端代码
Humburger humburger= new ChickenBurger();Humburger addLettuce =new Lettuce(humburger);Humburger addChilli =new Chilli(addLettuce);Log.d(TAG, "Humburger: "+addChilli.getName());结果:Humburger: 鸡腿堡 加生菜 加辣椒
通过对比不难发现,建造者模式要求建造的过程必须是稳定的。而装饰模式的过程不是稳定的。装饰模式是对于一个东西做的是表面外部的装扮,属于对一个对象的拓展,而建造者模式是对一个东西整体框架的一个组装,属于对一个对象的建造。
注:以上纯属个人观点,欢迎指正
阅读全文
0 0
- Java设计模式学习笔记 2
- Java设计模式 -- 学习笔记
- java 设计模式 学习笔记 (2) - 工厂方法模式
- java设计模式学习笔记2 策略模式
- java/android 设计模式学习笔记(2)---观察者模式
- 学习笔记——JAVA设计模式<2>工厂模式
- java设计模式学习笔记-工厂模式
- java设计模式学习笔记-构建模式
- java设计模式学习笔记-原型模式
- java设计模式学习笔记-适配器模式
- java设计模式-工厂模式学习笔记
- java设计模式学习笔记--外观模式
- 学习笔记:Java设计模式-命令模式
- 学习笔记:java设计模式--命令模式
- java设计模式学习笔记--观察者模式
- java设计模式学习笔记--适配器模式
- java设计模式学习笔记--代理模式
- java 设计模式学习笔记十二 command命令设计模式
- LeetCode: -Dynamic Programming-Strange Printer[664]
- 程序设计语言
- 用GridView加载网络图片(上)
- 看了一定会收藏的海量数据实时在线分析Quick BI
- STL源码分析
- Java设计模式学习笔记 2
- CodeForces
- 操作系统Unix、Windows、Mac OS、Linux的故事
- 【PAT】【Advanced Level】1088. Rational Arithmetic (20)
- phper成长之路
- spring-cloud教程:Spring Cloud还是Dubbo?
- 日常笔记之-初学secureCRT
- File类初解
- 使用MyEntunnel和Proxifier搭建代理服务器