常用设计模式学习
16lz
2021-01-22
一、建造模式:是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
代码:
public interface Builder {测试代码:
void buildPartA();
void buildPartB();
void buildPartC();
Product getResult();
}
//具体建造工具
public class ConcreteBuilder implements Builder {
Part partA, partB, partC;
public void buildPartA() {
//这里是具体如何构建partA的代码
};
public void buildPartB() {
//这里是具体如何构建partB的代码
};
public void buildPartC() {
//这里是具体如何构建partB的代码
};
public Product getResult() {
//返回最后组装成品结果
};
}
//建造者
public class Director {
private Builder builder;
public Director( Builder builder ) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
public interface Product { }
public interface Part { }
下面是调用builder的方法:
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();
二、Adapter(适配器模式):定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.
例如:假设我们要打桩,有两种类:方形桩 圆形桩.
publicclassSquarePeg{
publicvoidinsert(Stringstr){
System.out.println("SquarePeginsert():"+str);}}
publicclassRoundPeg{
publicvoidinsertIntohole(Stringmsg){
System.out.println("RoundPeginsertIntoHole():"+msg);}}
如果我们需要两边继承,即继承SquarePeg 又继承RoundPeg,因为Java中不允许多继承,但是我们可以实现(implements)两个接口(interface)
publicinterfaceIRoundPeg{下面是新的RoundPeg 和SquarePeg, 除了实现接口这一区别,和上面的没什么区别。
publicvoidinsertIntoHole(Stringmsg);}
publicinterfaceISquarePeg{
publicvoidinsert(Stringstr);}
publicclassSquarePegimplementsISquarePeg{publicvoidinsert(Stringstr){下面是新的PegAdapter,叫做two-way adapter:
System.out.println("SquarePeginsert():"+str);}}
publicclassRoundPegimplementsIRoundPeg{publicvoidinsertIntohole(Stringmsg){
System.out.println("RoundPeginsertIntoHole():"+msg);}}
publicclassPegAdapterimplementsIRoundPeg,ISquarePeg{
privateRoundPegroundPeg;privateSquarePegsquarePeg;
//构造方法
publicPegAdapter(RoundPegpeg){this.roundPeg=peg;}//构造方法
publicPegAdapter(SquarePegpeg)(this.squarePeg=peg;)
publicvoidinsert(Stringstr){roundPeg.insertIntoHole(str);}}
更多相关文章
- java 和 C 代码运行效率的比较(整理)
- java中两个事物,怎么设置,能让一个事物出现异常,另一个也回滚?哪位大
- Java:IntelliJ想法生成的代码错误地为所有Class名称添加了其包名
- 与==两个字符串的Java比较是假的? [重复]
- 求一段与读取数据库数据,写入一个数组的javascript 代码!谢谢!!
- java动态编译 (java在线执行代码后端实现原理)
- leetcode解题之242# Valid Anagram Java版 (判断两个字母串是否具
- java SSH员工管理系统以及Demo代码下载
- JavaScript 面向对象编程,严格过程的标准化编程法,目前为止最好的