设计模式_工厂模式
2016-07-27 19:01
253 查看
(以打印机为例子)
结构:
有一个主类:定义一个
一个接口:用来声明共同的方法的
3个类:
创造打印机的类:
宏碁的打印机类,继承了接口:
打印机的类:里面有三个方法(输入,更新,和输出)
实现:
实现了输入第一台打印机的时候,调用创建打印机的类中的方法,返回创建宏碁的类的对象赋给接口的引用。如果这个引用不空,则调用pc类的构造函数把创建的打印机赋给自身的打印机对象,把这个Pc的对象调用它自身的输入数据这个方法,输入MAX个数据。调用output这个方法的时候,输出这个数组的最大值。
目的:
把打印机这个东西封装在计算机里面,通过接口来获取对象。最后用计算机这个对象来操作打印机。
结构:
有一个主类:定义一个
一个接口:用来声明共同的方法的
3个类:
创造打印机的类:
宏碁的打印机类,继承了接口:
打印机的类:里面有三个方法(输入,更新,和输出)
实现:
实现了输入第一台打印机的时候,调用创建打印机的类中的方法,返回创建宏碁的类的对象赋给接口的引用。如果这个引用不空,则调用pc类的构造函数把创建的打印机赋给自身的打印机对象,把这个Pc的对象调用它自身的输入数据这个方法,输入MAX个数据。调用output这个方法的时候,输出这个数组的最大值。
目的:
把打印机这个东西封装在计算机里面,通过接口来获取对象。最后用计算机这个对象来操作打印机。
//有多台打印机 //有一台电脑 //打印工厂 //测试类 import java.util.Scanner; public class PrintTest { public static void main( String[] args ){ //测试 Scanner sc = new Scanner( System.in ); System.out.print( "请选择你要的打印机: " ); int op = sc.nextInt(); Printer out = FactoryPrint.getPrinter( op ); Pc pc; if( out!=null ){ pc = new Pc( out ); pc.getData(); pc.output(); //输出数据 } } } //职能: 创造打印机 class FactoryPrint{ public static Printer getPrinter( int i ){ Printer out = null; switch( i ){ case 1: out = new AcerPrinter(); break; } return out; } } //输出器 interface Printer{ public void print( int[] ary ); //抽象方法 } class AcerPrinter implements Printer{ public void print( int[] ary ){ int max = ary[ 0 ]; for( int i=1; i<ary.length; i++ ){ if( max < ary[i] ) max = ary[i]; } System.out.println( "max = "+ max ); } } class Pc { private Printer out; //打印机 final int MAX = 5; int[] data = new int[ MAX ]; //把数据存到这里 public Pc( Printer out ){ this.out = out; } //输入数据 public void getData( ){ Scanner sc = new Scanner( System.in ); for( int i=0; i<MAX; i++ ){ data[i] = sc.nextInt(); } } public void updateData(){ //没有实现 } public void output(){ out.print( data ); } }
相关文章推荐
- 【JAVA】继承
- bzoj1834(网络流+费用流)
- 关于Java中静态属性和静态代码块的执行顺序问题
- git命令
- AngularJs应用的基本元素总结
- Mysql学习总结(13)——使用JDBC处理MySQL大数据
- git与SVN协同的工作流程
- 二分查找
- HDU - 1026 - Ignatius and the Princess I(bfs)
- Multiplication Table 【二分】
- 面试中关于Java你所需知道的的一切
- construction of tuples containing 0 or 1 items
- MyBatis源码分析(4)—— Cache构建以及应用
- python 的三元表达式
- 简单的UIScrollView循环滑动
- Mysql学习总结(12)——21分钟Mysql入门教程
- Java匿名内部类
- python 迭代 及列表生成式
- Andorid之华为手机开发模式不打印日志
- Codeforces Round #298 (Div. 2) C. Polycarpus' Dice(思路)