java几种常用设计模式简单示例 =.docx

上传人:小飞机 文档编号:3159561 上传时间:2023-03-11 格式:DOCX 页数:34 大小:46.56KB
返回 下载 相关 举报
java几种常用设计模式简单示例 =.docx_第1页
第1页 / 共34页
java几种常用设计模式简单示例 =.docx_第2页
第2页 / 共34页
java几种常用设计模式简单示例 =.docx_第3页
第3页 / 共34页
java几种常用设计模式简单示例 =.docx_第4页
第4页 / 共34页
java几种常用设计模式简单示例 =.docx_第5页
第5页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《java几种常用设计模式简单示例 =.docx》由会员分享,可在线阅读,更多相关《java几种常用设计模式简单示例 =.docx(34页珍藏版)》请在三一办公上搜索。

1、java几种常用设计模式简单示例 =java几种常用设计模式简单示例 设计模式Java 1.单例设计模式 所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类永远只会有一个实例化对象产生。具体实现步骤如下: (1) 将采用单例设计模式的类的构造方法私有化。 (2) 在其内部产生该类的实例化对象,并将其封装成private static类型。 (3) 定义一个静态方法返回该类的实例。 示例代码如下: Java代码 class Singleton private static Singleton instance = new Singleton;/ 在内部产生本类的实例化对象 publ

2、ic static Singleton getInstance / 通过静态方法返回instance对象 return instance; private Singleton / 将构造方法封装为私有化 public void print System.out.println(Hello World!); public class SingletonDemo public static void main(String args) Singleton s1 = null; / 声明对象 Singleton s2 = null; / 声明对象 Singleton s3 = null; / 声明对

3、象 s1 = Singleton.getInstance; / 取得实例化对象 s2 = Singleton.getInstance; / 取得实例化对象 s3 = Singleton.getInstance; / 取得实例化对象 s1.print; / 调用方法 s2.print; / 调用方法 s3.print; / 调用方法 java view plaincopyprint? class Singleton private static Singleton instance = new Singleton;/ 在内部产生本类的实例化对象 public static Singleton g

4、etInstance / 通过静态方法返回instance对象 return instance; private Singleton / 将构造方法封装为私有化 public void print System.out.println(Hello World!); public class SingletonDemo public static void main(String args) Singleton s1 = null; / 声明对象 Singleton s2 = null; / 声明对象 Singleton s3 = null; / 声明对象 s1 = Singleton.getI

5、nstance; / 取得实例化对象 s2 = Singleton.getInstance; / 取得实例化对象 s3 = Singleton.getInstance; / 取得实例化对象 s1.print; / 调用方法 s2.print; / 调用方法 s3.print; / 调用方法 class Singleton private static Singleton instance = new Singleton;/ 在内部产生本类的实例化对象 public static Singleton getInstance / 通过静态方法返回instance对象 return instance

6、; private Singleton / 将构造方法封装为私有化 public void print System.out.println(Hello World!); public class SingletonDemo public static void main(String args) Singleton s1 = null; / 声明对象 Singleton s2 = null; / 声明对象 Singleton s3 = null; / 声明对象 s1 = Singleton.getInstance; / 取得实例化对象 s2 = Singleton.getInstance;

7、/ 取得实例化对象 s3 = Singleton.getInstance; / 取得实例化对象 s1.print; / 调用方法 s2.print; / 调用方法 s3.print; / 调用方法 一、单例模式的介绍 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点 二、单例模式的实现 实现的方式有如下四种: Java代码 /* * * 单例模式的实现:饿汉式,线程安全 但效率比较低 */ public class SingletonTest private SingletonTest priva

8、te static final SingletonTest instance = new SingletonTest; public static SingletonTest getInstancei return instance; java view plaincopyprint? /* * * 单例模式的实现:饿汉式,线程安全 但效率比较低 */ public class SingletonTest private SingletonTest private static final SingletonTest instance = new SingletonTest; public s

9、tatic SingletonTest getInstancei return instance; /* * * 单例模式的实现:饿汉式,线程安全 但效率比较低 */ public class SingletonTest private SingletonTest private static final SingletonTest instance = new SingletonTest; public static SingletonTest getInstancei return instance; Java代码 /* * 单例模式的实现:饱汉式,非线程安全 * */ public cl

10、ass SingletonTest private SingletonTest private static SingletonTest instance; public static SingletonTest getInstance if (instance = null) instance = new SingletonTest; return instance; java view plaincopyprint? /* * 单例模式的实现:饱汉式,非线程安全 * */ public class SingletonTest private SingletonTest private st

11、atic SingletonTest instance; public static SingletonTest getInstance if (instance = null) instance = new SingletonTest; return instance; /* * 单例模式的实现:饱汉式,非线程安全 * */ public class SingletonTest private SingletonTest private static SingletonTest instance; public static SingletonTest getInstance if (ins

12、tance = null) instance = new SingletonTest; return instance; Java代码 /* * 线程安全,但是效率非常低 * author vanceinfo * */ public class SingletonTest private SingletonTest private static SingletonTest instance; public static synchronized SingletonTest getInstance if (instance = null) instance = new SingletonTest

13、; return instance; java view plaincopyprint? /* * 线程安全,但是效率非常低 * author vanceinfo * */ public class SingletonTest private SingletonTest private static SingletonTest instance; public static synchronized SingletonTest getInstance if (instance = null) instance = new SingletonTest; return instance; /* *

14、 线程安全,但是效率非常低 * author vanceinfo * */ public class SingletonTest private SingletonTest private static SingletonTest instance; public static synchronized SingletonTest getInstance if (instance = null) instance = new SingletonTest; return instance; Java代码 /* * 线程安全 并且效率高 * */ public class SingletonTes

15、t private static SingletonTest instance; private SingletonTest public static SingletonTest getIstance if (instance = null) synchronized (SingletonTest.class) if (instance = null) instance = new SingletonTest; return instance; 2.工厂设计模式 程序在接口和子类之间加入了一个过渡端,通过此过渡端可以动态取得实现了共同接口的子类实例化对象。 示例代码如下: Java代码 in

16、terface Animal / 定义一个动物的接口 public void say; / 说话方法 class Cat implements Animal / 定义子类Cat Override public void say / 覆写say方法 System.out.println(我是猫咪,喵呜!); class Dog implements Animal / 定义子类Dog Override public void say / 覆写say方法 System.out.println(我是小狗,汪汪!); class Factory / 定义工厂类 public static Animal

17、getInstance(String className) Animal a = null; / 定义接口对象 if (Cat.equals(className) / 判断是哪个子类的标记 a = new Cat; / 通过Cat子类实例化接口 if (Dog.equals(className) / 判断是哪个子类的标记 a = new Dog; / 通过Dog子类实例化接口 return a; public class FactoryDemo public static void main(String args) Animal a = null; / 定义接口对象 a = Factory.

18、getInstance(args0); / 通过工厂获取实例 if (a != null) / 判断对象是否为空 a.say; / 调用方法 java view plaincopyprint? interface Animal / 定义一个动物的接口 public void say; / 说话方法 class Cat implements Animal / 定义子类Cat Override public void say / 覆写say方法 System.out.println(我是猫咪,喵呜!); class Dog implements Animal / 定义子类Dog Override

19、public void say / 覆写say方法 System.out.println(我是小狗,汪汪!); class Factory / 定义工厂类 public static Animal getInstance(String className) Animal a = null; / 定义接口对象 if (Cat.equals(className) / 判断是哪个子类的标记 a = new Cat; / 通过Cat子类实例化接口 if (Dog.equals(className) / 判断是哪个子类的标记 a = new Dog; / 通过Dog子类实例化接口 return a; p

20、ublic class FactoryDemo public static void main(String args) Animal a = null; / 定义接口对象 a = Factory.getInstance(args0); / 通过工厂获取实例 if (a != null) / 判断对象是否为空 a.say; / 调用方法 interface Animal / 定义一个动物的接口 public void say; / 说话方法 class Cat implements Animal / 定义子类Cat Override public void say / 覆写say方法 Syst

21、em.out.println(我是猫咪,喵呜!); class Dog implements Animal / 定义子类Dog Override public void say / 覆写say方法 System.out.println(我是小狗,汪汪!); class Factory / 定义工厂类 public static Animal getInstance(String className) Animal a = null; / 定义接口对象 if (Cat.equals(className) / 判断是哪个子类的标记 a = new Cat; / 通过Cat子类实例化接口 if (D

22、og.equals(className) / 判断是哪个子类的标记 a = new Dog; / 通过Dog子类实例化接口 return a; public class FactoryDemo public static void main(String args) Animal a = null; / 定义接口对象 a = Factory.getInstance(args0); / 通过工厂获取实例 if (a != null) / 判断对象是否为空 a.say; / 调用方法 3.代理设计模式 指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。比

23、如生活中的通过代理访问网络,客户通过网络代理连接网络,由代理服务器完成用户权限和访问限制等与上网相关的其他操作。 示例代码如下: Java代码 interface Network / 定义Network接口 public void browse; / 定义浏览的抽象方法 class Real implements Network / 真实的上网操作 public void browse / 覆写抽象方法 System.out.println(上网浏览信息!); class Proxy implements Network / 代理上网 private Network network; publ

24、ic Proxy(Network network) / 设置代理的真实操作 work = network; / 设置代理的子类 public void check / 身份验证操作 System.out.println(检查用户是否合法!); public void browse this.check; / 调用具体的代理业务操作 work.browse; / 调用真实的上网操作 public class ProxyDemo public static void main(String args) Network net = null; / 定义接口对象 net = new Proxy(new

25、 Real); / 实例化代理,同时传入代理的真实操作 net.browse; / 调用代理的上网操作 java view plaincopyprint? interface Network / 定义Network接口 public void browse; / 定义浏览的抽象方法 class Real implements Network / 真实的上网操作 public void browse / 覆写抽象方法 System.out.println(上网浏览信息!); class Proxy implements Network / 代理上网 private Network network

26、; public Proxy(Network network) / 设置代理的真实操作 work = network; / 设置代理的子类 public void check / 身份验证操作 System.out.println(检查用户是否合法!); public void browse this.check; / 调用具体的代理业务操作 work.browse; / 调用真实的上网操作 public class ProxyDemo public static void main(String args) Network net = null; / 定义接口对象 net = new Pro

27、xy(new Real); / 实例化代理,同时传入代理的真实操作 net.browse; / 调用代理的上网操作 interface Network / 定义Network接口 public void browse; / 定义浏览的抽象方法 class Real implements Network / 真实的上网操作 public void browse / 覆写抽象方法 System.out.println(上网浏览信息!); class Proxy implements Network / 代理上网 private Network network; public Proxy(Netwo

28、rk network) / 设置代理的真实操作 work = network; / 设置代理的子类 public void check / 身份验证操作 System.out.println(检查用户是否合法!); public void browse this.check; / 调用具体的代理业务操作 work.browse; / 调用真实的上网操作 public class ProxyDemo public static void main(String args) Network net = null; / 定义接口对象 net = new Proxy(new Real); / 实例化代

29、理,同时传入代理的真实操作 net.browse; / 调用代理的上网操作 4.观察者设计模式 所谓观察者模式,举个例子现在许多购房者都密切观察者房价的变化,当房价变化时,所有购房者都能观察到,以上的购房者属于观察者,这便是观察者模式。 java中可以借助Observable类和Observer接口轻松实现以上功能。当然此种模式的实现也不仅仅局限于采用这两个类。 示例代码如下: Java代码 import java.util.Observable; import java.util.Observer; class House extends Observable private float p

30、rice; public void setPrice(float price) this.setChanged;/ 设置变化点 this.notifyObservers(price);/ 通知所有观察者价格改变 this.price = price; public float getPrice return this.price; public House(float price) this.price = price; public String toString return 房子价格为: + this.price; class HousePriceObserver implements

31、Observer private String name; public HousePriceObserver(String name) super; this.name = name; Override public void update(Observable o, Object arg) / 只要改变了 observable 对象就调用此方法 if (arg instanceof Float) System.out.println(this.name + 观察的价格更改为: + (Float) arg).floatValue); public class ObserDeom public

32、 static void main(String args) House h = new House(1000000); HousePriceObserver hpo1 = new HousePriceObserver(购房者A); HousePriceObserver hpo2 = new HousePriceObserver(购房者B); HousePriceObserver hpo3 = new HousePriceObserver(购房者C); h.addObserver(hpo1);/ 给房子注册观察者 h.addObserver(hpo2);/ 给房子注册观察者 h.addObse

33、rver(hpo3);/ 给房子注册观察者 System.out.println(h);/ 输出房子价格 / 修改房子价格,会触发update(Observable o, Object arg)方法通知购房者新的房价信息 h.setPrice(2222222);/ System.out.println(h);/ 再次输出房子价格 java view plaincopyprint? import java.util.Observable; import java.util.Observer; class House extends Observable private float price;

34、public void setPrice(float price) this.setChanged;/ 设置变化点 this.notifyObservers(price);/ 通知所有观察者价格改变 this.price = price; public float getPrice return this.price; public House(float price) this.price = price; public String toString return 房子价格为: + this.price; class HousePriceObserver implements Observ

35、er private String name; public HousePriceObserver(String name) super; this.name = name; Override public void update(Observable o, Object arg) / 只要改变了 observable 对象就调用此方法 if (arg instanceof Float) System.out.println(this.name + 观察的价格更改为: + (Float) arg).floatValue); public class ObserDeom public static void main(String args) House h = new House(1000000); HousePriceObserver hpo1 = new HousePriceObserver(购房者A); HousePriceObserver hpo2 = new HousePriceObserver(购房者B); HousePri

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号