程序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

  

Java—接口(工厂模式代理模式)相关推荐

  1. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  2. Java的三种代理模式完整源码分析

    Java的三种代理模式&完整源码分析 Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCach ...

  3. Java的三种代理模式【附源码分析】

    Java的三种代理模式&完整源码分析 代理模式分为两种,静态代理和动态代理,动态代理包括JDK动态代理和Cglib动态代理. 静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理 ...

  4. 设计模式(初探工厂与代理模式)——学习记录

    0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...

  5. 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景

    设计模式 ​ 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...

  6. JAVA设计模式--结构型模式--代理模式

    1.代理模式(Proxy Pattern) 一个类代表另一个类的功能.这种类型的设计模式属于结构型模式.在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 1.1意图: 为其他对象提供 ...

  7. 设计模式(装饰者模式外观模式代理模式)

    目录 装饰者模式 介绍 实现 外观模式 介绍 实现 代理模式 介绍 实现 装饰者模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设 ...

  8. C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...

    结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...

  9. 设计模式 — 结构型模式 — 代理模式

    目录 文章目录 目录 代理模式 应用场景 代码示例 代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户 ...

  10. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

    前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...

最新文章

  1. GD32通用定时器、高级定时器PWM输出例程
  2. 一体化市场谋定国际品牌贸易 对话国际农民丰收节贸易会
  3. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)
  4. element ui 中 el-menu 如何添加链接router-link标签
  5. Linux 环境下 jdk1.8 maven3.2.3 Git2.8.0 安装脚本
  6. linux系统运行powerbi,使用 Power BI 服务 - Power BI | Microsoft Docs
  7. python 函数中所有print保存csv_python for循环print怎样才能输出csv呢
  8. 15. HTML 块 div span
  9. 如何利用ffmpeg提供的API函数进行多媒体文件的解封装
  10. KNN算法(K近邻学习)
  11. js中调用vue中的方法
  12. 【图文详解】,cisco,***配置
  13. 解除mysql只有本机可以访问的限制
  14. mac上设置新版chrome浏览器跨域
  15. .NET面试基础知识
  16. kotlin入门教程
  17. OpenCV-像素值读写(java版)
  18. PX4模块设计之九:PX4飞行模式简介
  19. Scrapy项目 - 数据简析 - 实现豆瓣 Top250 电影信息爬取的爬虫设计
  20. linux的sssd服务,Linux sssd 认证

热门文章

  1. for oracle中pivot_oracle关键字pivot行转列【坑爹的三小时,动脑经真累 】 | 学步园...
  2. Anaconda下如何创建python2等虚拟环境
  3. vue 跨域问题 - 总结篇
  4. 开源Blog系统-欧式风格家具网站源码v1.5.4
  5. 两台电脑usb直连传数据_如何通过一根USB数据线把手机/平板充当电脑的第二个显示器...
  6. python怎么用第三方库_python中第三方库的下载方法
  7. 红色风格电脑手机数码商城系统网站源码
  8. Master PDF Editor_v5.7.00 PDF编辑
  9. linux禁用及启用pcie设备,KVM 介绍(4):I/O设备直接分配和 SRIOV [KVM PCI/PCIe PassThrough SRIOV]...
  10. php hmacsha1计算,PHP HMAC_SHA1 算法 生成算法签名