(i)创建模式

Factory模式

工厂方法

package com.test;public class Factory {/*** Method main*** @param args**/public static void main(String[] args) {// TODO: Add your code hereSample sampleA=new SampleA();Sample sampleB=new SampleB();sampleA.say();sampleA.hello();sampleB.say();sampleB.hello();//通过工厂实例化Sample,不涉及具体子类System.out.println("通过工厂实例化Sample,不涉及具体子类");Sample sampleA1=Factory.creare(1);Sample sampleB1=Factory.creare(2);sampleA1.say();sampleA1.hello();sampleB1.say();sampleB1.hello();}  public static Sample creare(int which){switch(which){case 1:return new SampleA();case 2:return new SampleB();default:return new SampleA();}}
}interface Sample{public void say();abstract void hello();
}class SampleA implements Sample{public void say(){System.out.println("this is SampleA...");}public void hello(){System.out.println("Hello...");}
}class SampleB implements Sample{public void say(){System.out.println("this is SampleB...");}public void hello(){System.out.println("Hello...");}
}this is SampleA...
Hello...
this is SampleB...
Hello...
通过工厂实例化Sample,不涉及具体子类
this is SampleA...
Hello...
this is SampleB...
Hello...

抽象工厂

package com.test;interface Sample1{public void say();abstract void hello();
}interface Sample2{public void say();abstract void hello();
}class SampleA1 implements Sample1{public void say(){System.out.println("this is SampleA1...");}public void hello(){System.out.println("Hello...");}
}class SampleB1 implements Sample1{public void say(){System.out.println("this is SampleB1...");}public void hello(){System.out.println("Hello...");}
}class SampleA2 implements Sample2{public void say(){System.out.println("this is SampleA2...");}public void hello(){System.out.println("Hello...");}
}class SampleB2 implements Sample2{public void say(){System.out.println("this is SampleB2...");}public void hello(){System.out.println("Hello...");}
}public abstract class Factory {/*** Method main*** @param args**/public static void main(String[] args) {// TODO: Add your code here//cannot instance type of abstract classSimpleFactory simpleFactory=new SimpleFactory();BombFactory bombFactory=new BombFactory();simpleFactory.create().say();simpleFactory.create().hello();simpleFactory.create("sampleA2").say();simpleFactory.create("sampleA2").hello();bombFactory.create().say();bombFactory.create().hello();bombFactory.create("sampleB2").say();bombFactory.create("sampleB2").hello();} public abstract Sample1 create();public abstract Sample2 create(String name);}class SimpleFactory extends Factory{public Sample1 create(){return new SampleA1();}public Sample2 create(String name){return new SampleA2();}
}class BombFactory extends Factory{public Sample1 create(){return new SampleB1();}public Sample2 create(String name){return new SampleB2();}
}

this is SampleA1…
Hello…
this is SampleA2…
Hello…
this is SampleB1…
Hello…
this is SampleB2…
Hello…

单例模式

package com.test;public class Singleton {private Singleton(){}private static Singleton instance=new Singleton();public static Singleton getInstance(){return instance;}void say(int count){count++;System.out.println("this is Singleton mode"+count);}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubint count=0;Singleton singleton1=Singleton.getInstance();singleton1.say(count);Singleton singleton2=Singleton.getInstance();singleton2.say(count);System.out.println(singleton1);System.out.println(singleton2);System.out.println("count="+count);Singleton1.getInstance().say();}}class Singleton1{private static Singleton1 instance=null;public static synchronized Singleton1 getInstance(){//这个方法较上面有所改进,不用每次都生成对象if(instance==null){instance=new Singleton1();}return instance;}void say(){System.out.println("this is Singleton1 mode");}
}

this is Singleton mode1
this is Singleton mode1
com.test.Singleton@6b97fd
com.test.Singleton@6b97fd
count=0
this is Singleton1 mode

Builder模式

将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示

package com.test;public class Test{public static void main(String[] args){ConcreteBuilder concreteBuilder=new ConcreteBuilder();Director director=new Director(concreteBuilder);director.construct();Product product=concreteBuilder.getProduct();}
}interface Builder{void buildPartA();void buildPartB();void buildPartC();Product getProduct();
}interface Product{}interface Part{}class Director{private Builder builder;public Director(Builder builder){this.builder=builder;}public void construct(){builder.buildPartA();builder.buildPartB();builder.buildPartC();}
}class ConcreteBuilder implements Builder{public void buildPartA() {// TODO Auto-generated method stubSystem.out.println("buildPartA...");}public void buildPartB() {// TODO Auto-generated method stubSystem.out.println("buildPartB...");}public void buildPartC() {// TODO Auto-generated method stubSystem.out.println("buildPartC...");}public Product getProduct() {// TODO Auto-generated method stubreturn null;}}

buildPartA…
buildPartB…
buildPartC…

prototype模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

package com.test;public class Test{public static void main(String[] args){AbstractSpoon spoon=new SoupSpoon();AbstractSpoon spoon2=(SoupSpoon)spoon.clone();System.out.println("spoon "+spoon);System.out.println("spoon2 "+spoon2);spoon.drinkSoup();spoon2.drinkSoup();}
}abstract class AbstractSpoon implements Cloneable{String spoonName;public String getSpoonName() {return spoonName;}public void setSpoonName(String spoonName) {this.spoonName = spoonName;}public Object clone(){Object obj=null;try {obj=super.clone();} catch (CloneNotSupportedException e) {// TODO: handle exceptionSystem.err.println("AbstractSpoon is not Cloneable");}return obj;}public void drinkSoup(){System.out.println("drink soup...");}
}class SoupSpoon extends AbstractSpoon{public SoupSpoon(){setSpoonName("Soup Spoon");}
}

spoon com.test.SoupSpoon@f6a746
spoon2 com.test.SoupSpoon@15ff48b
drink soup…
drink soup…

Java23种设计模式(一)相关推荐

  1. JAVA23种设计模式学习,源码+案例分析+类图讲解

    本文对JAVA中23种设计模式进行了简单的讲解,幷加以实际案例进行辅助理解,每种模式都会举例说明,幷将源码开源至gitee和githbu上.JAVA目录下为源码,resources目录下的UML文件夹 ...

  2. 走穿java23种设计模式-15责任链模式详解

    走穿java23种设计模式-15责任链模式详解 责任链模式是一种常见的行为模式. 一.责任链模式的现实场景 习伟过生日邀请了很多朋友到KTV一起庆祝,为了增加欢乐的气氛,习伟建议大家一起玩击鼓传花的游 ...

  3. JAVA23种设计模式(2)-结构型模式7种

    JAVA23种设计模式(2)-结构型模式7种 把类结合在一起形成更大的结构 适配器模式(adapter) 一句话:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 这是平时比较常见的一种模 ...

  4. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  5. 走穿java23种设计模式--18中介者模式详解

    走穿java23种设计模式–18中介者模式详解 中介者模式也称调停者模式,是一种比较简单的模式. 一.中介者模式的现实场景 蔡良因为上次表白时对方只看重他的物质方面,所以他对女朋友这个问题有点失望.因 ...

  6. java-23种设计模式详解(一)

    2019独角兽企业重金招聘Python工程师标准>>>  设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反 ...

  7. 深入浅出Java23种设计模式(一)

    文章目录 关于设计模式 六大设计原则 开闭原则(Open Close Principle) 里氏代换原则(Liskov Substitution Principle) 依赖倒转原则(Dependenc ...

  8. 学习java23种设计模式自我总结

    首先先做个广告,以前看过@maowang 这位大神转的Java开发中的23种设计模式详解(转) ,但是看了之后都忘差不多了, 所以,开个帖子边学习边自我总结(纯手敲).一直以来像这种需要长久的运动,真 ...

  9. JAVA23种设计模式:单例设计模式【二】

    在有些系统中,为了节省内存资源,保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式 单例设计模式的定义与特点 定义: 指一个类只有一个实例 ,且该类能自行创建这个实列的一种模式. ...

  10. Java23种设计模式总结-学而不习则罔

    冰冻三尺,非一日之寒 经常说到Java的设计模式,今天做个总结和分享,以便学习. 设计模式并没有用到新的任何关于Java的新知识点,无非就是大佬们在根据Java语言特性的基础上,根据一定的设计原则,结 ...

最新文章

  1. Amber16和AmberTools16在CentOS 7下GPU加速版的安装
  2. jQuery 表单验证插件,jQuery Validation Engine用法详解
  3. Andoid自定义View的OnMeasure详解和自定义属性
  4. leetcode 10、Regular Expression Matching
  5. java temporalfield_Java Year isSupported(TemporalField)用法及代码示例
  6. Android WebRTC视频旋转问题
  7. Java安全编码之用户输入
  8. flink下载以及兼容性问题
  9. mysql老是自动停止_ecs云服务器 mysql经常自动停止挂掉重启问题分析
  10. html和php文件怎么连接,html页面跟php文件连接的方法
  11. 调用者保存寄存器和非调用者保存寄存器
  12. apisix实际应用_OpenResty 社区王院生:APISIX 的高性能实践
  13. 博客园 编程基础 精华
  14. Servlet-请求匹配,创建Servlet的三种方式,API 1
  15. paip.索引的种类以及实现attilax 总结
  16. VBA基本操作(二)——空白单元格填充
  17. PIC单片机之中断程序
  18. RabbitMQ:什么是消息队列MQ?为什么使用消息队列MQ?入门MQ先学哪种?(一)
  19. 怎样用计算机做一个电子地图,怎样用计算机编制一幅地图
  20. java arraylist优点_java – 创建初始容量为0的ArrayList的优点?

热门文章

  1. realsched.exe进程
  2. 命名实体识别研究综述
  3. Mybatis缓存机制及mybatis的各个组成部分
  4. 几种实用的pythonic语法
  5. [LeetCode]Patching Array
  6. 持续集成(4)工具对比
  7. 由乱序播放说开了去-数组的打乱算法Fisher–Yates Shuffle
  8. jackson json的使用
  9. 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
  10. Cent OS 下 VI 使用方法