Java设计模式
来源:互联网 发布:游戏编程图书 编辑:程序博客网 时间:2024/05/18 03:15
单例模式:
概述:
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
优点:
在内存中只存在一个对象,可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式可以提高系统的性能。
缺点:
没有抽象层,因此难扩展
职责过重,在一定程序上违反了单一原则。
饿汉:
public class Singleton{ private Singleton singleton=new Singleton(); public static Singleton getInstance(){ return singleton; }}静态内部类:
public class Singleton{ private static class SingeletonHolder{ private static final Singleton INSTANCE=new Singleton(); } private Singleton{} public static final getInstance(){ return SingletionHolder.INSTANCE; }}
装饰者模式:
概述:
装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承替代方案。
优点:
使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意组合这些功能。
缺点:
正因为可以随意组合,所以就可能出现一些不合理的逻辑。
public interface Phone{ public void call();}
public class Iphone implements Phone{ public void call(){ System.out.println("打电话"); }}
/***装饰者类*/public abstract class PhoneDecoration implements Phone{ private Phone p; public PhoneDecoration(Phone p){ this.p=p; } public void call(){ this.p.call(); }}
//对手机装饰彩铃public class RingDemo implements PhoneDecotation{ public RingDemo(Phone p){ super(p); } public void call(){ System.out.println("听彩铃"); super.call(); }}
//对手机装饰听音乐public class MusicDemo implements PhoneDecotation{ public MusicDemo(Phone p){ super(p); } public void call(){ super.call(); System.out.println("听音乐"); }}
//测试package cn.decotation.test;public class Test {public static void main(String[] args) {Phone p = new IphoneDemo();// 需求:打电话前听彩铃Decoration d = new RingDemo(p);d.call();System.out.println("-----------------");// 需求:打电话后听音乐d = new MusicDemo(p);d.call();System.out.println("-----------------");// 需求:打电话前听彩铃,打电话后听音乐d=new RingDemo(new MusicDemo(p));d.call();}}
概述:
模板方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现
优点:
使用模板方法模式,在定义算法骨架的同时,可以灵活的实现具体的算法,满足用户灵活多变的需求。
缺点:
如果算法骨架有修改的话,则需要修改抽象类.
public abstract Template{ public long calculation(){ long start=System.currentTimeMillis(); code(); long end=System.currentTimeMillis(); return end-start; } public abstract void code();}
public class ForDemo extends Template{ @Overridepublic void code() {for (int i = 0; i < 10000; i++) {System.out.println(i);}} }
public class CopyDemo extends Template{ @Overridepublic void code() {try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:/js/Penguins.jpg"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:/js/b.jpg"));byte[] bytes = new byte[1024];int len = 0;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, len, 0);}bis.close();bos.close();} catch (Exception e) {e.printStackTrace();}}}
package cn.template.test;public class Test {public static void main(String[] args) {Template t = new CopyDemo();long time=t.calculation();System.out.println(time+" 毫秒");}}
0 0
- [Java] JAVA设计模式
- Java设计模式--Java设计模式介绍
- Java设计模式-模板设计
- java设计模式-----(设计原则)
- Java设计模式-设计原则
- java设计模式-观察者模式
- Java设计模式-----Singleton模式
- Java设计模式-----Command模式
- Java设计模式-----State模式
- Java设计模式-----Composite模式
- Java设计模式 -- 策略模式
- java设计模式-----策略模式
- java设计模式_Composite模式
- java 设计模式-策略模式
- java设计模式 访问者模式
- java设计模式-代理模式
- java设计模式----适配器模式
- Java 设计模式 --装饰模式
- MongoDB笔记
- ContentProvider(内容提供者)和ContentResolve(内容访问者)
- nginx 参数优化
- hi3519v101 sdk 编译错误
- 友盟推送Python demo失败
- Java设计模式
- 动画——Interpolator插值器
- 类模板和函数模板
- java.lang.NullPointerException: Attempt to invoke virtual method 'void com.hhl.library.FlowTagLayout
- 单页WEB应用(三),Chat聊天模块
- Java反射 是怎么一回事?
- 数据结构与算法分析笔记与总结(java实现)--二叉树5:平衡二叉树判断练习题
- GOF设计模式-外观模式(Facade)
- 如何进入COMS