java的23种设计模式
来源:互联网 发布:什么是淘宝小号和大号 编辑:程序博客网 时间:2024/06/08 17:24
一、单例模式
作用:
1 为了避免其他程序过多的建立该类对象。禁止其他程序建立该类对象。
2 为了其他程序可以访问该类对象,在本类中自定义一个对象。
3 方便其他程序对自定义类的对象的访问,对外提供一些访问方式。
实现:
1将构造函数私有化
2在类中创建一个私有的本类对象
3提供一个用类名调用的公有方法获取该对象。
代码:
class Single { private static Single s = new Single(); // 恶汉式 private Single() { } public static Single getInstance() { returns; }} class Single2 { private static Single2 s = null; // 懒汉 private Single2() { } public static Single2 getInstance() { if (s ==null) { s = new Single2(); } returns; }}二、模板模式
作用:
解决某类事情的步骤有些是固定的,有些是会发生变化的,那么这时候我们可以为这类事情提供一个模板代码,从而提高效率 。
实现:
1. 先写出解决该类事情其中 的一件的解决方案。
2. 分析代码,把会发生变化的代码抽取出来独立成一个方法。把该方法描述成一个抽象的方法。
3. 使用final修饰模板方法,防止别人 重写你的模板方法。
代码:
abstract class MyRuntime{public final void getTime(){long startTime = System.currentTimeMillis();//记录开始的时间code();long endTime = System.currentTimeMillis(); //记录结束的时间.System.out.println("运行时间 :"+ (endTime-startTime));}public abstract void code();}class Demo11 extends MyRuntime{public static void main(String[] args) {Demo11 d = new Demo11();d.getTime();}//code方法内部就写要计算运行时间 的代码;public void code(){int i = 0;while(i<100){System.out.println("i="+i);i++;}}}
三:装饰者设计模式
作用:增强一个类的功能,而且还可以让这些装饰类互相装饰。
步骤:
1. 在装饰类的内部维护一个被装饰类的引用。
2. 让装饰类有一个共同的父类或者是父接口。
import java.io.IOException;//带行号的缓冲输入字符流class BufferedLineNum2 extends BufferedReader{ //在内部维护一个被装饰类的引用。BufferedReader bufferedReader;int count = 1;public BufferedLineNum2(BufferedReader bufferedReader){super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错。this.bufferedReader = bufferedReader;}public String readLine() throws IOException{String line = bufferedReader.readLine();if(line==null){return null;}line = count+" "+line;count++;return line;}} //带分号缓冲输入字符流class BufferedSemi2 extends BufferedReader{ //为什么要继承? 是为了让这些装饰类的对象可以作为参数进行传递,达到互相装饰 的效果。//在内部维护一个被装饰类的引用。BufferedReader bufferedReader;public BufferedSemi2(BufferedReader bufferedReader){ // new BuffereLineNum();super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错。this.bufferedReader = bufferedReader;}public String readLine() throws IOException{String line = bufferedReader.readLine(); //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。if(line==null){return null;}line = line +";";return line;}}//缓冲类带双引号class BufferedQuto2 extends BufferedReader{//在内部维护一个被装饰的类BufferedReader bufferedReader;public BufferedQuto2(BufferedReader bufferedReader){ //new BufferedSemi2();super(bufferedReader) ; //只是为了让代码不报错..this.bufferedReader = bufferedReader;}public String readLine() throws IOException{String line = bufferedReader.readLine(); //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。if(line==null){return null;}line = "\""+line +"\"";return line;}}public class Demo2 {public static void main(String[] args) throws IOException {File file = new File("F:\\Demo1.java");FileReader fileReader = new FileReader(file);//建立缓冲输入字符流BufferedReader bufferedReader = new BufferedReader(fileReader);//建立带行号的缓冲输入字符流BufferedLineNum2 bufferedLineNum = new BufferedLineNum2(bufferedReader);//带分号的缓冲输入字符流BufferedSemi2 bufferedSemi2 = new BufferedSemi2(bufferedLineNum);//带双引号的缓冲输入字符流BufferedQuto2 bufferedQuto2 = new BufferedQuto2(bufferedSemi2);String line = null;while((line = bufferedQuto2.readLine())!=null){System.out.println(line);}}}
阅读全文
0 0
- 设计模式Java的23种设计模式23种设计模式编程java
- JAVA设计模式---23种设计模式
- 23种设计模式的java代码
- Java的23种设计模式
- Java的23种设计模式
- Java的23种设计模式
- java的23种设计模式
- java的23种设计模式
- 趣解Java的23种设计模式
- java 的23种设计模式
- Java的23种设计模式
- java的23种设计模式
- JAVA的23种设计模式
- java的23种设计模式
- Java的23种设计模式
- java开发的23种设计模式
- java的23种设计模式
- Java的23种设计模式详解
- Oracle REF动态游标
- leetcode 第13题 Roman to Integer
- 提交网址到Google搜索引擎
- 关于近来学习linux的一些心得
- 35. Search Insert Position
- java的23种设计模式
- (JAVA)数位之和
- python 基础 —— "%s" 与 "%r" 的区别
- 最小二乘和梯度下降
- python模块系列之-logging
- 如何检查php中是否安装freetype
- 异常之一 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
- 【VS】关于内存分布查看的方式
- [笔记]: 哈弗曼树(最优二叉树)