面向接口编程(思维培养)

1 篇文章 0 订阅

面向接口编程(思维培养)

待更新…(19.05.27)

面向接口编程:

IStrorage 接口
UDisk 实现IStrorage接口
HardDisk 实现IStrorage接口
MP3 实现IStrorage接口


Phone 
PhoneAdapter 实现IStrorage接口


Computer


CommonDAO<T>接口
QuestionTypeDAO接口 继承自CommonDAO<QuestionType>
QuestionTypeDAOImpl实现类 实现QuestionTypeDAO接口

CommonService<T>接口
QuestionTypeService接口 继承自CommonService<QuestionType>接口
QuestionTypeServiceImpl实现类 实现QuestionTypeService接口
接口依赖于QuestionTypeDAO

private QuestionTypeDAO questionTypeDAO;
及setter方法

QuestionTypeController控制器
private QuestionTypeService questionTypeService;

举例:

实物举例实物的一些属性或功能
computer电脑上有USB接口,可连接一些产品
UDisk一个U盘,可直接插到电脑的USB口上与电脑连接
HardDisk一个移动硬盘,可直接插到电脑的USB口上与电脑连接
MP3一个MP3,可直接插到电脑的USB口上与电脑连接
Phone一个老式手机,需要一个转换头,才能插到电脑的USB口上与电脑连接

UDisk\HardDisk\MP3 , 具有相同的标准 , 即规范相同
Phone , 因为需要转换头,不符合规范

规范相同,可以实现一个接口

UDisk\HardDisk\MP3插上电脑的USB插口即可与电脑连接 , USB插口就是 接口 ,也即本文最顶代码区中的 IStrorage 接口

不符合规范,就需要一个转换器来实现一个接口

Phone , 老式手机所需要的转换器即 PhoneAdapter ,使用转换器之后便可与 IStrorage 接口 相连,再连接到computer

====================================

IStorage接口

public interface IStorage {
    void read(); //读取数据
    void write(); //写数据
}

MP3类实现了IStorage接口,变成 接口类

public class MP3 implements IStorage {
    public MP3()
    {
        System.out.println("构造MP3");
    }
    private String brand,color;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        System.out.println("设置Brand");
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        System.out.println("设置color");
        this.color = color;
    }

    @Override
    public void read() {
        System.out.println("读取品牌为"+brand+"颜色为"+color+"的MP3");
    }

    @Override
    public void write() {
        System.out.println("写入品牌为"+brand+"颜色为"+color+"的MP3");
    }
}

Computer类

public class Computer {
    public Computer()
    {
        System.out.println("构造computer");
    }

    private IStorage storage;
    public void setStorage(IStorage storage) {
        System.out.println("插入移动设备"+storage.getClass().getName());
        this.storage = storage;
    }

    public void readData()
    {
        storage.read();
    }
    public void writeData()
    {
        storage.write();
    }

}

这时我们看一下MP3连接电脑后的打印情况

public static void main(String[]args){
        Computer computer = new Computer();
        MP3 mp3 = new MP3();
        mp3.setBrand("华为ie");
        mp3.setColor("炫彩");
        computer.setStorage(mp3); //MP3变为接口类
        computer.readData();
    }
    打印如下:
	    构造MP3
		设置Brand
		设置color
		插入移动设备MP3
		读取品牌为华为ie颜色为炫彩的MP3

====================================

手机不能直接连接电脑,需要一个转换器,即PhoneAdapter , 也即 适配器 (适配器设计模式)

PhoneAdapter

//适配器设计模式
public class PhoneAdapter implements IStorage {   //实现接口用于连接电脑
    private Phone phone;

    public void setPhone(Phone phone) {    //连接手机
        this.phone = phone;
    }

    @Override
    public void read() {
        phone.readIt();
    }

    @Override
    public void write() {
        phone.writeIt();
    }
}

打印一下看看

		Phone phone = new Phone();
        PhoneAdapter adapter = new PhoneAdapter();
        adapter.setPhone(phone);
        computer.setStorage(adapter);

====================================

但是我们发现每次new一个对象,并对这个对象进行赋值等操作还是很繁琐的 ! 这时我们可以创建一个 类 来完成这些繁琐的操作
超级工厂设计模式

超级工厂设计模式

public class ComputerFactory {
    public static Computer getInstance(String type)
    {
        Computer computer = new Computer();
        if("MP3".equals(type))
        {
            MP3 mp3 = new MP3();
            mp3.setBrand("华为");
            mp3.setColor("沙滩金");
            computer.setStorage(mp3);
        }
        else if("Phone".equals(type))
        {
            Phone phone = new Phone();
            PhoneAdapter adapter = new PhoneAdapter();
            adapter.setPhone(phone);
            computer.setStorage(adapter);
        }
        return computer;
    }
}

来打印一下他吧

Computer computer = ComputerFactory.getInstance("Phone");
 computer.readData();

====================================

但是我们发现在写 超级工厂 这个类时,其实也是比较繁琐的,那有没有什么方法使其更简化呢?
答案就是 Spring框架

Spring框架

看一下spring的xml如何配置吧

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="computer" class="com.wanmait.demo.Computer">  //computer类在这个包下
        <property name="storage" ref="mp3"/>  //设置 属性storage的值 依赖为mp3对象
    </bean>

    <bean id="udisk" class="com.wanmait.demo.UDisk"/>

    <bean id="mp3" class="com.wanmait.demo.MP3">
        <property name="brand" value="华为"/>  //设置 属性brand的值 为"华为"
        <property name="color" value="落日金"/>
    </bean>

</beans>

打印一下他看看吧

		//加载spring框架
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

        //给spring要一个computer
      	Computer computer = (Computer)ac.getBean("computer");

        computer.readData();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值