java--接口与工厂设计模式--知识点总结
(1)接口是什么?
接口是一个集合,里面全部由抽象方法和全局变量组成,可以把接口理解为一个特殊的类。
(2)为什么要用接口?
java中用抽象类会存在单继承局限,所以用接口来实现多继承。
(3)接口的特点
- 1丶定义接口使用关键字interface 接口的名称使用I来表示。
2丶接口中的数据成员默认为 public static final 。
接口中的方法默认为 public abstract 。
3丶接口内不能有已经实现的方法。
4丶接口不能进行实例化。如:IMessage imessage = new IMessage();
5丶接口可以继承多个接口,此时的接口拥有了继承的接口里面的抽象方法。
6丶如果一个抽象类继承了接口,那么抽象类可以不实现接口的方法,
但是如果再有一个普通类继承了此抽象类,那么普通类一定要实现接口和抽象类 里面的抽象方法。
**例:**USB接口 有 read()和 write()两种方法
interface USB{ void read(); void write(); } class YouPan implements USB{ @Override public void read() { System.out.println("U盘正在通过USB功能读取数据"); } @Override public void write() { System.out.println("U盘正在通过USB功能写入数据"); } } class JianPan implements USB{ @Override public void read() { System.out.println("键盘正在通过USB功能读取数据"); } @Override public void write() { System.out.println("键盘正在通过USB功能写入数据"); } } public class TestDemo3{ public static void main(String[] args) { YouPan youPan = new YouPan(); youPan.read(); youPan.write(); JianPan jianPan = new JianPan(); jianPan.read(); jianPan.write(); } }
运行结果如下:
一丶简单工厂模式
优点:1丶简单易于实现 2丶把类的实例化交给工厂,易于解耦
缺点:添加产品需要修改工厂违反OCP开放封闭原则
实例:
创建生产电脑的工厂,客户需要购买什么样的电脑,只需要输入电脑类型就可以获取该电脑
接口:
package com.bit.src; public interface Computer { void printComputer(); }
一个电脑工厂:
public class ComputerFactory { public static Computer gatInstance(String type){ Computer computer=null; if(type.equals("苹果笔记本")){ computer=new MacComputer(); }else if(type.equals("小米笔记本")){ computer=new MiComputer(); } return computer; } }
具体产品:
1丶苹果笔记本
public class MacComputer implements Computer { @Override public void printComputer() { System.out.println("这是苹果笔记本"); } }
2丶小米笔记本
public class MiComputer implements Computer { @Override public void printComputer() { System.out.println("这是小米笔记本"); } }
客户端:
public class KeHu { public static void buy(Computer computer){ computer.printComputer(); } public static void main(String[] args) { KeHu kehu = new KeHu(); Scanner scanner = new Scanner(System.in); System.out.println("请输入您想要的电脑型号"); String type=scanner.nextLine(); /* Computer computer=ComputerFactory.gatInstance(type); kehu.buyComputer(computer);*/ buy(ComputerFactory.gatInstance(type)); } }
二丶工厂方法模式
定义一个用来创建对象的接口,让子类决定实例化哪一个类,让子类决定实例化延迟到子类。
优点:1丶降低了代码耦合度,对象的生成交给子类去完成。2丶实现了开放封闭原则–每次添加子产品不需要修改原有代码。
缺点:1丶增加了代码量,每个具体产品都需要一个具体共厂。2丶当增加抽象产品也就是添加一个其他产品族,需要修改工厂,违背OCP。
实例:
增加一个接口:
电脑工厂类
interface ComputerFactory { Computer creatComputer(); }
增加两个电脑工厂:
1丶苹果电脑工厂
public class MacFactory implements ComputerFactory{ public Computer creatComputer(){ return new MacComputer(); } }
2丶小米电脑工厂
public class MiFactory implements ComputerFactory { public Computer creatComputer(){ return new MiComputer(); } }
客户类
public class KeHu { public static void buyComputer(Computer computer){ computer.printComputer(); } public static void main(String[] args) { ComputerFactory computerFactory = new MacFactory(); Computer computer = computerFactory.creatComputer(); buyComputer(computer); } }
三丶抽象工厂模式
如果要用不同的操作系统比如:苹果系统和windows 8两种系统,就需要用抽象工厂模式。
需要新增创建系统的方法,然后由实例工厂去实现。
新增一个接口:
操作系统类
public interface operatingSystem { void printSystem(); }
工厂新增两个重写方法:
1丶
public class MacFactory implements ComputerFactory{ public Computer creatComputer(){ return new MacComputer(); } @Override public operatingSystem creatSystem() { return new MacSystem(); } }
2丶
public class MiFactory implements ComputerFactory{ public Computer creatComputer(){ return new MiComputer(); } @Override public operatingSystem creatSystem() { return new Windows8System(); } }
新增两个系统:
1丶window8系统:
class Windows8System implements operatingSystem{ @Override public void printSystem() { System.out.println("这是windows8系统"); } }
2丶苹果系统:
public class MacSystem implements operatingSystem { @Override public void printSystem() { System.out.println("这是苹果系统"); } }
客户类:
public class KeHu { public static void buyComputer(Computer computer){ computer.printComputer(); } public static void Use(operatingSystem operatingSystem) { operatingSystem.printSystem(); } public static void main(String[] args) { ComputerFactory computerFactory = new MiFactory(); ComputerFactory computerFactory1 = new MacFactory(); Computer computer = computerFactory.creatComputer(); Computer computer1 = computerFactory1.creatComputer(); operatingSystem operatingSystem= computerFactory.creatSystem(); operatingSystem operatingSystem1= computerFactory1.creatSystem(); buyComputer(computer); Use( operatingSystem); buyComputer(computer1); Use( operatingSystem1); } }
代理设计模式
两个子类共同实现一个接口,其中一个子类负责真实业务实现,另外一个子类完成辅助真实业务主题的操作
package com.bit.src; public interface ISubject { void buyComputer(); } public class RealSubject implements ISubject{ @Override public void buyComputer() { System.out.println("2,购买电脑"); } } public class DaiLISubject implements ISubject { private RealSubject realSubject;//真实的业务 public DaiLISubject(RealSubject realSubject){ this.realSubject=realSubject; } public void produceComputer(){ System.out.println("1,生产电脑"); } public void afterSale(){ System.out.println("3,售后服务"); } @Override public void buyComputer() { this.produceComputer();//真是操作前准备 this.realSubject.buyComputer();//调用代理业务 this.afterSale();//操作后结尾 } } public class Client { public static void main(String[] args) { RealSubject realSubject=new RealSubject(); DaiLISubject daiLISubject=new DaiLISubject(realSubject); daiLISubject.buyComputer(); }
抽象类与接口的区别
1丶结构组成:
抽象类:普通类+抽象方法
接口:抽象方法+全局变量
2丶权限:
抽象类:各种权限
接口:public
3丶子类使用:
抽象类:使用extends关键字继承抽象类
接口:使用implements关键字实现接口
4丶关系:
抽象类:一个抽象类可以实现若干接口
接口:接口不能继承抽象类,但是接口可以使用extends关键字继承多个父接口
5丶子类限制:
抽象类:一个子类只能继承一个抽象类
接口:一个子类可以实现多个接口
- java中接口和工厂设计模式
- 黑马程序员 知识点总结-Java单例设计模式
- 总结:java设计模式之---工厂方法
- 设计模式总结之工厂模式-java实现
- JAVA面向对象知识点总结(4)— 单例设计模式:饿汉式、懒汉式
- java学习之路之接口(3)--工厂设计模式
- java的设计模式,学习心得总结-工厂模式
- JAVA常用设计模式总结(单例,工厂,抽象工厂)
- JAVA学习--接口的应用:工厂方法的设计模式
- 总结:java设计模式之----抽象工厂
- JAVA基础(五)工厂模式及其他创建型设计模式总结
- java设计模式总结二:工厂模式
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- Java设计模式之工厂方法、抽象工厂模式 程序 总结
- C#用工厂模式、反射机制和缓存机制来设计数据访问层的接口总结
- JAVA接口工厂和代理设计模式,简单
- java的设计模式,学习心得总结-工厂模式
- (2011年java基础)设计模式总结(简述)
- 设计模式之java接口和java抽象类
- java设计模式【创建模式】之工厂模式