博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口(工厂模式&代理模式)
阅读量:6991 次
发布时间:2019-06-27

本文共 4392 字,大约阅读时间需要 14 分钟。

程序1:简单的接口功能

package com.liaojianya.chapter2;/** * 编写程序实现一个usb接口,定义设备来使用这个接口,从而计算机可以调用具有usb接口的设备。 * @author LIAO JIANYA * 2016年7月27日 */public class InterfaceStandards{	public static void main(String[] args)	{		Computer com = new Computer();		com.plugin(new Flash());//在电脑上使用U盘		com.plugin(new Print());//在电脑上使用打印机	}}//定义USB接口标准interface USB{	public void work();}//在电脑上使用具有USB接口的设备class Computer{	public void plugin(USB usb)	{		usb.work();	}}//打印机实现USB接口标准class Print implements USB{	public void work()	{		System.out.println("打印机用USB接口,连接开始工作");	}}//U盘实现USB接口标准class Flash implements USB{	public void work()	{		System.out.println("U盘使用USB接口,连接开始工作");	}}

  运行结果:

U盘使用USB接口,连接开始工作打印机用USB接口,连接开始工作

  分析:

  按照固定的USB接口标准,可以定义无数多个子类,并且这些子类可以在电脑上使用。

  程序2:工厂模式

package com.liaojianya.chapter2;/** *  * @author LIAO JIANYA * 2016年7月27日 */public class SimpleFactoryTest{	public static void main(String[] args)	{		Animal an = Factory.getInstance("lion");		an.behaviour();		an = Factory.getInstance("bird");		an.behaviour();	}}//定义一个动物标准interface Animal{	public void behaviour();}class Lion implements Animal{	public void behaviour()	{		System.out.println("狮子跑");	}}class Bird implements Animal{	public void behaviour()	{		System.out.println("鸟儿飞");	}}class Factory{	public static Animal getInstance(String className)	{		if("lion".equals(className))		{			return new Lion();		}		if("bird".equals(className))		{			return new Bird();		}		return null;	}}

  运行结果:

狮子跑鸟儿飞

  分析:

  1)根据参数的内容实例化不同的子类,参数内容为“lion”,实例化的就是Lion类,参数内容为“bird”,实例化的就是Bird类,所以输出内容也不同。

  2)此时的程序,客户端没有呵呵具体的子类耦合在一起,这样,如果再有更多的Animal接口的子类粗线,只需要修改Factory类即可,即所有的接口对象都是通过Factory类取得。

  程序3:代理设计模式

package com.liaojianya.chapter2;/** * 设计代理模式,用红酒厂商、代理商、客户来阐释代理的作用 * @author LIAO JIANYA * 2016年7月27日 */public class ProxyTest{	public static void main(String[] args)	{		Subject sub = new ProxySubject();//客户直接找代理,子类为接口实例化		sub.request();	}}//代理请求abstract class Subject{	abstract public void request();}//真实角色(红酒厂商)class RealSubject extends Subject{	public void request()	{		System.out.println("我是红酒厂商,欢迎品尝购买!");	}}//代理角色(代理商)class ProxySubject extends Subject{	private RealSubject realSubject;	public void request()	{		preRequest();		if(realSubject == null)		{			realSubject = new RealSubject();		}		realSubject.request();		postRequest();	}	private void preRequest()	{		System.out.println("前期宣传活动,免费品尝");	}	private void postRequest()	{		System.out.println("结束宣传活动,付费购买");	}}

   运行结果:

前期宣传活动,免费品尝我是红酒厂商,欢迎品尝购买!结束宣传活动,付费购买

  分析:代理设计模式的核心组成部分:一个接口两个子类,一个子类负责真实的业务操作功能,如红酒厂商;一个子类负责完成与真实业务相关的操作,如红酒代理商。

  程序4:接口与抽象类设计

package com.liaojianya.chapter2;import java.util.Scanner;/** * 利用接口及抽象类设计实现: * 1)定义接口圆形CircleShape,其中定义常量PI,提供方法computeArea()计算面积 * 2)定义圆形类Circle实现接口CircleShape,包含构造方法和求圆形周长方法; * 3)定义圆柱继承Cicle实现接口CircleShape,包含构造方法,圆柱表面积,体积; * 4)从控制台输入圆半径,输出圆面积及周长; * 5)从控制台输入圆柱底面半径及高,输出圆柱底面积、圆柱表面积及体积。 * @author LIAO JIANYA * 2016年7月27日 */public class InterfaceAndAbstract{	public static void main(String[] args)	{		Scanner san = new Scanner(System.in);		System.out.println("输入圆的半径:");		double r = san.nextDouble();		Circle circle = new Circle(r);		System.out.println("圆的面积为:" + circle.computeArea() 			+ ",圆的周长为:" + circle.computeGirth());		System.out.println("输入圆柱底面半径:");		r = san.nextDouble();		System.out.println("输入圆柱高:");		double h = san.nextDouble();		Cylinder cylinder = new Cylinder(r, h);		System.out.println("圆柱的底面积为: " + cylinder.computeBaseArea() 			+ ",圆柱的表面积为:" + cylinder.computeSurfaceArea()			+ ",圆柱的体积为:" + cylinder.computeVolune());		san.close();	}}interface CircleShape{	public static final double PI = 3.14;	public double computeArea();}class Circle implements CircleShape{	double area;	double girth;	double r;	public Circle(double r)	{		this.r = r;	}	public double computeArea()	{		return area = PI * r * r;			}		public double computeGirth()	{		return girth = 2 * PI * r;	}}class Cylinder extends Circle implements CircleShape{	double baseArea;	double sufaceArea;	double volume;	double h;	public Cylinder(double r, double h)	{		super(r);		this.h = h;	}		public double computeBaseArea()	{		return baseArea = super.computeArea();	}		public double computeSurfaceArea()	{		return sufaceArea = super.computeGirth() * h;	}		public double computeVolune()	{		return volume = baseArea * h;	}}

  运行结果:

输入圆的半径:1圆的面积为:3.14,圆的周长为:6.28输入圆柱底面半径:1输入圆柱高:2圆柱的底面积为: 3.14,圆柱的表面积为:12.56,圆柱的体积为:6.28

  

转载于:https://www.cnblogs.com/Andya/p/5709937.html

你可能感兴趣的文章
两个list<object> 比较 得到相同数据 差异数据
查看>>
The road to learning English-Writing
查看>>
Codeforces 990B :Micro-World
查看>>
interceptor拦截器
查看>>
课堂练习
查看>>
Git 工具 - 储藏(Stashing)
查看>>
c# Winforms WebBrowser - Clear all cookies
查看>>
学习 Spring (十) 注解之 @Bean, @ImportResource, @Value
查看>>
POJ 1741 Tree ——点分治
查看>>
越狱(快速幂)
查看>>
联合查询的 SQL 语法
查看>>
Python语法
查看>>
服务器使用bbr加速配置
查看>>
Hadoop综合大作业
查看>>
JAVA 消耗 CPU过高排查方法
查看>>
DOM和BOM
查看>>
prometheus监控示例
查看>>
细菌的繁殖
查看>>
Windows Server 2008远程连接人数限制修改及修改端口
查看>>
第70天:jQuery基本选择器(一)
查看>>