第十周总结

第十周总结

1.知识总结

1.对于抽象类和抽象方法来说,抽象类不一定包含抽象方法,但是抽象方法一定在抽象类里面。

2.接口是一个特殊的类,编译成功之后形成的还是calss文件。相对于抽象类来说,它是100%的抽象类,即接口里面的方法都是抽象方法。

3.接口里面的方法不一定都没有方法体,当方法被static,default修饰的时候,方法是可以有方法体的。static修饰的方法是加载在方法区的,受接口的影响不大。

4.实现某个接口一定要重写接口中所有的抽象方法。

5.接口中的方法默认的修饰符为public abstract

6.接口没有构造方法,很容易理解,接口只能定义常量不能定义变量,而且实现接口的类必须重写它所有的方法,所以通过构造方法构造特征是没必要的,因为特征已经形成了。

7.抽象类带来了面向抽象编程:多态(父类型引用指向子类型对象)

2.简单工厂模式

通俗地理解简单工厂模式就是,当客户需要某个商品的时候,客户只负责根据自己的需求点,工厂只负责制作。

假如要写一个制作汽车的工厂

先写一个汽车接口,创建一个汽车的基本模型,然后让工厂来根据客户需求具体实现

package factory.EasyF;

public interface Car
{
    void Run();
    void buy();
    void maintain();
}

实现接口,创建不同需求下的类

package factory.EasyF;

public class HongQi implements Car
{
    public void Run()
    {
        S("红旗试跑!!");
    }
    public void buy()
    {
        S("已购买红旗!!");
    }
    public void maintain()
    {
        S("红旗维修中!!");
    }
    public static void S(String s )
    {
        System.out.println(s);
    }
}

package factory.EasyF;


public class Lamborghini implements Car
{
    public void Run()
    {
        S("兰博基尼试跑!!");
    }
    public void buy()
    {
        S("已购买兰博基尼!!");
    }
    public void maintain()
    {
        S("兰博基尼维修中!!");
    }
    public static void S(String s )
    {
        System.out.println(s);
    }
}

package factory.EasyF;
import factory.EasyF.Car;

public class WuLin implements Car
{
    public void Run()
    {
        S("五菱宏光试跑!!");
    }
    public void buy()
    {
        S("已购买五菱宏光!!");
    }
    public void maintain()
    {
        S("五菱宏光维修中!!");
    }
    public static void S(String s )
    {
        System.out.println(s);
    }
}

再写一个工厂类

package factory.EasyF;


public class Factory
{
    public static Car getCarName(String name)
    {
        if(name.equals("兰博基尼"))//判断语句,判断客户需求
        {
            return new Lamborghini();//返回实例化对象
        }
        else if(name.equals("五菱宏光"))
        {
            return new WuLin();
        }
        else if(name.equals("红旗"))
        {
            return new HongQi();
        }
        else
        {
            System.out.println("不能生产该车辆!!");
        }
        return null;
    }
}

这样一个简单的工厂就实现了,然后测试一下

package factory.EasyF;
import factory.EasyF.Factory;
import java.util.Scanner;

public class run
{
    public static void main(String[] args)
    {
        String name;
        Car c = null;//父类型引用,指向子类型对象
        int num=0,zl = 100;
        Factory f = new Factory();//创建工厂对象
        Scanner in = new Scanner(System.in);
        System.out.println("请输入你要进行的操作:1-买车,2-维修车,3-试驾,100-退出");
        zl = in.nextInt();
        while(zl != 100)
        {
            if(zl == 1)
            {
                System.out.println("请输入要购买的车辆");
                name = in.next();
                c = f.getCarName(name);
            }
            else if(zl == 2)
            {
                if(c == null)
                {
                    System.out.println("未拥有车辆!!");
                }
                else
                {
                    c.maintain();
                }
            }
            else if(zl == 3)
            {
                if(c == null)
                {
                    System.out.println("未拥有车辆!!");
                }
                else
                {
                    c.Run();
                }
            }
            System.out.println("请输入你要进行的操作:1-买车,2-维修车,3-试驾,100-退出");
            zl = in.nextInt();
        }
    }
}

3.抽象工厂

其实抽象工厂和简单工厂很相似,就是抽象工厂可以创建多个简单工厂,再次拿生产汽车来说。宝马和本田都生产汽车和机车。那么就需要多个工厂,但是假如我有无数个相似功能的工厂,简单工厂的方式的调用就十分的不方便,所以还是运用多态机制,利用父类型引用指向子类型对象的特点。

先构建出工厂的基本特征,创建一个工厂接口

package factory.abF;

public interface abFactory
{
    car carProduct();//基本的生产汽车和摩托
    mBike mBikeProduct();
}

然后就是简单工厂的基本流程

先创建汽车接口和摩托接口

package factory.abF;

public interface car
{
    void Run();
    void buy();
    void maintain();
}
package factory.abF;

public interface mBike
{
    void Run();
    void buy();
    void maintain();
}

实现汽车和摩托接口

package factory.abF;

public class BmwCar implements car
{
    public void Run()
    {
        System.out.println("宝马汽车试跑中!!!");
    }
    public void buy()
    {
        System.out.println("已购买宝马汽车!!!");
    }
    public void maintain()
    {
        System.out.println("宝马汽车正在维修中!!!");
    }
}

package factory.abF;

public class BMWMBike implements  mBike
{
    public void Run()
    {
        System.out.println("宝马机车试跑中!!!");
    }
    public void buy()
    {
        System.out.println("已购买宝马机车!!!");
    }
    public void maintain()
    {
        System.out.println("宝马机车正在维修中!!!");
    }
}

package factory.abF;

public class HondaCar implements car
{
    public void Run()
    {
        System.out.println("本田汽车试跑中!!!");
    }
    public void buy()
    {
        System.out.println("已购买本田汽车!!!");
    }
    public void maintain()
    {
        System.out.println("本田汽车正在维修中!!!");
    }
}

package factory.abF;

public class HondaMBike implements  mBike
{
    public void Run()
    {
        System.out.println("本田机车试跑中!!!");
    }
    public void buy()
    {
        System.out.println("已购买本田机车!!!");
    }
    public void maintain()
    {
        System.out.println("本田机车正在维修中!!!");
    }
}

再创建具体品牌的工厂,实现工厂接口,返回实例化对象

package factory.abF;

public class HondaFactory implements abFactory//本田工厂
{
    public car carProduct()
    {
        return new HondaCar();
    }
    public mBike mBikeProduct()
    {
        return new HondaMBike();
    }
}
package factory.abF;

public class BMWFactory implements abFactory//宝马工厂
{
    public car carProduct()
    {
        return new BmwCar();
    }
    public mBike mBikeProduct()
    {
        return new BMWMBike();
    }
}

最后再简单的测试实现一下

package factory.abF;


import java.util.Scanner;

public class run
{
    public static void main(String[] args)
    {
            car c = null;
            mBike m = null;
            int num=100,zl=100000;
            abFactory h = new HondaFactory();
            abFactory b = new BMWFactory();
            Scanner in = new Scanner(System.in);
            while(zl != 100)
            {
                while(num!=1&&num!=2)
                {
                    System.out.println("请输入你要进行操作的种类:1-汽车,2-机车");
                    num = in.nextInt();
                }
                System.out.println("请输入你要进行购买的品牌:1-本田,2-宝马,100-退出");
                zl = in.nextInt();
                if(zl == 1)
                {
                    if(num == 1)
                    {
                        c = h.carProduct();
                        c.buy();
                    }
                    else
                    {
                        m = h.mBikeProduct();
                        m.buy();
                    }
                }
                if(zl == 2)
                {
                    if (num == 1) {
                        c = b.carProduct();
                        c.buy();
                    }
                    else
                    {
                        m = b.mBikeProduct();
                        m.buy();
                    }
                }
                if(zl==4)
                {
                    if(num == 1)
                        c.maintain();
                    else
                        m.maintain();
                }
                if(zl == 5)
                {
                    if(num == 1)
                        c.Run();
                    else
                        m.Run();
                }
                if(zl == 3)
                {
                    System.out.println("请输入你要进行购买的品牌:1-本田,2-宝马,100-退出");
                    zl = in.nextInt();
                    continue;
                }
                System.out.println("请输入你要进行的操作:3-买车,4-维修车,5-试驾,100-退出");
                zl = in.nextInt();
            }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值