设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则

SimpleFactoryPattern,UML抽象图百度找,代码实现如下

使用简单工厂模式设计一个可以创建不同几何形状(如圆形、矩形和三角形等)的绘图工具,每个几何图形都要有计算面积area()和计算周长gride()两个方法

抽象产品类

package SimpleFactoryPattern;
public interface Product {
    public float area();
    public float gride();
}

具体产品类

package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Circular implements Product{
    private float r;
    public Circular(float r) {
        this.r = r;
    }
    @Override
    public float area() {
        return 3.14f * r * r;
    }

    @Override
    public float gride() {
        return 3.14f * 2 * r;
    }
}
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Rectangle implements Product {
    private float width;
    private float height;
    public Rectangle(float width, float height) {
        this.width = width;
        this.height = height;
    }
    @Override
    public float area() {
        return width * height * 1.0f;
    }
    @Override
    public float gride() {
        return (width + height) * 2.0f;
    }

}
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Triangle implements Product {
    private float a;
    private float b;
    private float c;
    public Triangle(float a, float b, float c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    @Override
    public float area() {
        float p = (a+b+c)/2.0f;
        return (float) Math.sqrt(p*(p-a)*(p-b)*(p-c));
    }
    @Override
    public float gride() {
        return a+b+c;
    }

}

简单工厂类

package SimpleFactoryPattern;
import java.util.Scanner;
import SimpleFactoryPattern.ConcreteProduct.Circular;
import SimpleFactoryPattern.ConcreteProduct.Rectangle;
import SimpleFactoryPattern.ConcreteProduct.Triangle;
public class Creator {
    Scanner scan = new Scanner(System.in);
    Product product=null;
    public Product create(String type) {        //工厂里的制造方法一定是静态吗!?
        if("圆".equals(type)){
            return new Circular(scan.nextFloat());
        }else if("矩形".equals(type)){
            return new Rectangle(scan.nextFloat(),scan.nextFloat());
        }else if("三角形".equals(type)){
            return new Triangle(scan.nextFloat(),scan.nextFloat(),scan.nextFloat());
        }else{
            return product;
        }
    }
}

测试类

package SimpleFactoryPattern;
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Product product = new Creator().create("");
        if(product==null){
            System.out.println("请填写工厂条件");
        }else{
            System.out.println(product.area());
        }
    }

}

别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。

SimpleFactoryPattern(23种设计模式之一)的更多相关文章

  1. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  2. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  3. Java开发中的23种设计模式(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. c#中的23种设计模式

    C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...

  5. Java 23种设计模式

    转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...

  6. 从追MM谈Java的23种设计模式(转)

    从追MM谈Java的23种设计模式    这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...

  7. java 23种设计模式及具体例子 收藏有时间慢慢看

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  8. JAVA:23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. 从追MM谈Java的23种设计模式

    从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...

  10. 23种设计模式全解析 (java版本)

    转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...

随机推荐

  1. 字符串数组是可以保存并输出null。只不过不好动态指定长度

    java里如何输出才能让字符串数组不显示出null 2014-05-23 17:46笨妞纤霏 | 浏览 1360 次  编程语言 代码如下package testCourse; public clas ...

  2. len(),range()函数

    len()函数返回字符串.列表.字典.元组等长度 eg1:计算字符串的长度: >>>s='hello good boy doiido' >>>len(s) > ...

  3. Java进阶知识点2:看不懂的代码 - 协变与逆变

    一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...

  4. C#进阶之路(六):表达式进行类的赋值

    好久没更新这个系列了,最近看.NET CORE源码的时候,发现他的依赖注入模块的很多地方用了表达式拼接实现的.比如如下代码 private Expression<Func<ServiceP ...

  5. LeetCode Predict the Winner

    原题链接在这里:https://leetcode.com/problems/predict-the-winner/description/ 题目: Given an array of scores t ...

  6. axios 请求报错

    报错如下: 解决:axios的请求配置中的baseURL配置错误,修改好即可. 报错前: baseURL: "192.168.30.220:3000", 解决后:baseURL: ...

  7. python if语句,while语句

    一,if语句: python中最常用的判断语句,基本格式: 1.if else格式 if  条件: 结果 else: 结果 """ if 条件: 满足条件执行代码 els ...

  8. bzoj 1997 [Hnoi2010]Planar——2-SAT+平面图的一个定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1997 平面图的一个定理:若边数大于(3*点数-6),则该图不是平面图. 然后就可以2-SAT ...

  9. Visualforce入门第三篇_2017.3.2

    Visualforce实现显示Record List(列表) 详细见链接:https://trailhead.salesforce.com/modules/visualforce_fundamenta ...

  10. VirtualBox-Debian7.2-share

    1.在VirtualBox(用的版本是4.3.6)中,选择虚拟机->设置-> 共享文件夹, 2.添加一个主机上的文件夹readhat用来作为共享文件夹,选中固定分配和自动挂载, 结果:进入 ...